//
// Created by whg on 2025-06-08.
//

#ifndef PYVM_2025_KLASS_HPP
#define PYVM_2025_KLASS_HPP

#include "util/map.hpp"

class PyObject;
class PyString;

class Klass{
private:
    Klass* _super;
    PyString* _name;

    PyDict* _dict;

public:
    Klass(){

    }

    void setSuper(Klass* super){
        _super = super;
    }
    Klass* super(){
        return _super;
    }

    void setName(PyString* name){
        _name = name;
    }
    PyString* name(){
        return _name;
    }

    void setDict(PyDict* dict){
        _dict = dict;
    }
    PyDict* dict(){
        return _dict;
    }

    virtual void print(PyObject* obj){
        printf("This is Klass print\n");
    }

    virtual PyObject* add(PyObject* x, PyObject* y){
        return nullptr;
    }

    virtual PyObject* greater(PyObject* x, PyObject* y){
        return nullptr;
    }
    virtual PyObject* less(PyObject* x, PyObject* y){
        return nullptr;
    }
    virtual PyObject* equal(PyObject* x, PyObject* y){
        return nullptr;
    }

    virtual PyObject* len(PyObject* obj){
        printf("This is Klass len\n");
        return nullptr;
    }
};

#endif //PYVM_2025_KLASS_HPP
